package com.wgz.medicalmanagement.domain.dto.ai;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 聊天完成响应DTO
 * OpenAI API的响应格式
 *
 * @author medical
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatCompletionResponse {
    
    /**
     * API响应的ID
     */
    private String id;
    
    /**
     * 响应对象类型
     */
    private String object;
    
    /**
     * 创建时间戳
     */
    private long created;
    
    /**
     * 使用的模型
     */
    private String model;
    
    /**
     * 系统指纹
     */
    private String systemFingerprint;
    
    /**
     * 选择列表
     * 包含API生成的响应
     */
    private List<Choice> choices;
    
    /**
     * 使用情况统计
     */
    private Usage usage;
    
    /**
     * 选择对象
     * 代表API生成的一个响应选项
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Choice {
        /**
         * 结束原因
         * 例如：stop, length, content_filter
         */
        @JsonProperty("finish_reason")
        private String finishReason;
        
        /**
         * 该选择在结果中的索引
         */
        private int index;
        
        /**
         * 响应消息
         */
        private ChatMessage message;
        
        /**
         * 日志概率
         */
        @JsonProperty("logprobs")
        private Object logprobs;
    }
    
    /**
     * 使用量统计
     * 包含Token使用信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Usage {
        /**
         * 完成使用的令牌数
         */
        @JsonProperty("completion_tokens")
        private int completionTokens;
        
        /**
         * 提示使用的令牌数
         */
        @JsonProperty("prompt_tokens")
        private int promptTokens;
        
        /**
         * 总共使用的令牌数
         */
        @JsonProperty("total_tokens")
        private int totalTokens;
    }
} 